import numpy as np


#P11 - 2
#Oscilador Não Harmónico Caótico,
#Metodo de Runge-Kutta 4a ordem a lei do movimento


def acelera(t, x, vx):
    return (-k*x - 4*alpha*x**3 - b*vx + F0*np.cos(wf*t)) / m


def rk4_x_vx(t, x, vx, acelera, dt):
    ax1 = acelera(t, x, vx)
    c1v = ax1*dt
    c1x = vx*dt

    ax2 = acelera(t + dt/2., x + c1x/2., vx + c1v/2.)
    c2v = ax2*dt
    c2x = (vx + c1v/2.)*dt

    ax3 = acelera(t + dt/2., x + c2x/2., vx + c2v/2.)
    c3v = ax3*dt
    c3x = (vx + c2v/2.)*dt

    ax4 = acelera(t + dt, x + c3x, vx + c3v)
    c4v = ax4*dt
    c4x = (vx + c3v)*dt

    xp = x + (c1x + 2.*c2x + 2.*c3x + c4x)/6.
    vxp = vx + (c1v + 2.*c2v + 2.*c3v + c4v)/6.
    return xp, vxp

